package com.johann.multithread.runnable;

/*
* 窗口买票的问题：一共有100张票，开三个窗口售票
*
* 存在线程不安全的问题
* */

// 用Runnable接口的方法实现多线程，主要是用的Thread(Runnable target)的有参构造方法实现的；


// 通过新建一个类Demo，实现Runnable接口，并重写内部的run方法；
// 实例化这个Demo类为demo，通过创建Thread对象，并把demo作为参数传入；即可

/*
*
* 一种是 通过继承Thread方法实现多线程
* 另一种是 通过实现Runnable方法实现多线程
*
* 开发过程中优先使用使用实现接口的方法、好处在于
* ① 继承只能是单继承，而实现可以是多实现；
* ② 实现的方式更适合来处理多个线程有共享数据的情况；
*
*
* */

public class RunnableDemo {
    public static void main(String[] args) {
        WindowsSellTicket wst = new WindowsSellTicket();

        Thread t1 = new Thread(wst);
        Thread t2 = new Thread(wst);
        Thread t3 = new Thread(wst);

        t2.start();
        t1.start();
        t3.start();
    }
}


class WindowsSellTicket implements Runnable{

    private int ticketSum = 100;

    @Override
    public void run() {
        for (;ticketSum>0; ticketSum--) {
            System.out.println(Thread.currentThread().getName()+":"+ticketSum);
        }
    }
}